dynamic class com.meychi.ascrypt.SHA1
{

    function SHA1()
    {
    }

    static function calculate(src)
    {
        return com.meychi.ascrypt.SHA1.hex_sha1(src);
    }

    static function hex_sha1(src)
    {
        return com.meychi.ascrypt.SHA1.binb2hex(com.meychi.ascrypt.SHA1.core_sha1(com.meychi.ascrypt.SHA1.str2binb(src), src.length * 8));
    }

    static function core_sha1(x, len)
    {
        x[len >> 5] = x[len >> 5] | 128 << 24 - len % 32;
        x[(len + 64 >> 9 << 4) + 15] = len;
        var __reg2 = new Array(80);
        var __reg6 = 1732584193;
        var __reg5 = -271733879;
        var __reg4 = -1732584194;
        var __reg3 = 271733878;
        var __reg7 = -1009589776;
        var __reg9 = 0;
        while (__reg9 < x.length) 
        {
            var __reg15 = __reg6;
            var __reg14 = __reg5;
            var __reg13 = __reg4;
            var __reg12 = __reg3;
            var __reg11 = __reg7;
            var __reg1 = 0;
            while (__reg1 < 80) 
            {
                if (__reg1 < 16) 
                {
                    __reg2[__reg1] = x[__reg9 + __reg1];
                }
                else 
                {
                    __reg2[__reg1] = com.meychi.ascrypt.SHA1.rol(__reg2[__reg1 - 3] ^ __reg2[__reg1 - 8] ^ __reg2[__reg1 - 14] ^ __reg2[__reg1 - 16], 1);
                }
                var __reg8 = com.meychi.ascrypt.SHA1.safe_add(com.meychi.ascrypt.SHA1.safe_add(com.meychi.ascrypt.SHA1.rol(__reg6, 5), com.meychi.ascrypt.SHA1.sha1_ft(__reg1, __reg5, __reg4, __reg3)), com.meychi.ascrypt.SHA1.safe_add(com.meychi.ascrypt.SHA1.safe_add(__reg7, __reg2[__reg1]), com.meychi.ascrypt.SHA1.sha1_kt(__reg1)));
                __reg7 = __reg3;
                __reg3 = __reg4;
                __reg4 = com.meychi.ascrypt.SHA1.rol(__reg5, 30);
                __reg5 = __reg6;
                __reg6 = __reg8;
                ++__reg1;
            }
            __reg6 = com.meychi.ascrypt.SHA1.safe_add(__reg6, __reg15);
            __reg5 = com.meychi.ascrypt.SHA1.safe_add(__reg5, __reg14);
            __reg4 = com.meychi.ascrypt.SHA1.safe_add(__reg4, __reg13);
            __reg3 = com.meychi.ascrypt.SHA1.safe_add(__reg3, __reg12);
            __reg7 = com.meychi.ascrypt.SHA1.safe_add(__reg7, __reg11);
            __reg9 = __reg9 + 16;
        }
        return new Array(__reg6, __reg5, __reg4, __reg3, __reg7);
    }

    static function sha1_ft(t, b, c, d)
    {
        if (t < 20) 
        {
            return b & c | b ^ 4.29497e+009 & d;
        }
        if (t < 40) 
        {
            return b ^ c ^ d;
        }
        if (t < 60) 
        {
            return b & c | b & d | c & d;
        }
        return b ^ c ^ d;
    }

    static function sha1_kt(t)
    {
        return t >= 20 ? (t >= 40 ? (t >= 60 ? -899497514 : -1894007588) : 1859775393) : 1518500249;
    }

    static function safe_add(x, y)
    {
        var __reg1 = (x & 65535) + (y & 65535);
        var __reg2 = (x >> 16) + (y >> 16) + (__reg1 >> 16);
        return __reg2 << 16 | __reg1 & 65535;
    }

    static function rol(num, cnt)
    {
        return num << cnt | num >>> 32 - cnt;
    }

    static function str2binb(str)
    {
        var __reg3 = new Array();
        var __reg4 = 255;
        var __reg1 = 0;
        while (__reg1 < str.length * 8) 
        {
            __reg3[__reg1 >> 5] = __reg3[__reg1 >> 5] | (str.charCodeAt(__reg1 / 8) & __reg4) << 24 - __reg1 % 32;
            __reg1 = __reg1 + 8;
        }
        return __reg3;
    }

    static function binb2hex(binarray)
    {
        var __reg4 = new String("");
        var __reg3 = new String("0123456789abcdef");
        var __reg1 = 0;
        while (__reg1 < binarray.length * 4) 
        {
            __reg4 = __reg4 + (__reg3.charAt(binarray[__reg1 >> 2] >> (3 - __reg1 % 4) * 8 + 4 & 15) + __reg3.charAt(binarray[__reg1 >> 2] >> (3 - __reg1 % 4) * 8 & 15));
            ++__reg1;
        }
        return __reg4;
    }

}
